package com.mzj.mzjaicodemother.service;

import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.service.IService;
import com.mzj.mzjaicodemother.model.dto.app.AppAdminQueryRequest;
import com.mzj.mzjaicodemother.model.dto.app.AppQueryRequest;
import com.mzj.mzjaicodemother.model.entity.App;
import com.mzj.mzjaicodemother.model.entity.User;
import com.mzj.mzjaicodemother.model.vo.app.AppVO;
import reactor.core.publisher.Flux;

import java.util.List;

/**
 * 应用 服务层。
 *
 * @author 梅子酒
 */
public interface AppService extends IService<App> {
    //用户获取应用信息
    AppVO getAppVO(App app);

    //用户分页查询应用
    List<AppVO> getAppVOList(List<App> appList);

    //构造查询对象
    QueryWrapper getQueryWrapper(AppQueryRequest request);

    /**
     * 通过对话生成应用代码
     * @param message 提示词
     * @param appId 应用id
     * @param LoginUser 登录用户信息
     * @return 流式响应结果
     */
    Flux<String> chatToGenCode(Long appId, String message, User LoginUser);

    /**
     * 应用部署
     * @param appId 应用id
     * @param loginUser 登录用户
     * @return 可访问的url
     */
    String deployApp(Long appId,User loginUser);


    //调用截图服务后持久化到数据库（最终封装）
    //       完整流程
    //       1.调用selenium访问生成的url首页并截图保存至本地
    //       2.将本地的图片上传至cos并得到可访问的url
    //       3.清理本地文件
    //       4.持久化到数据库
    void generateAppScreenshotAsync(Long appId, String appUrl);
}
